// 商品相关的路由表

// 加载模块
let express = require('express')
let path = require('path')
let goodsModel = require('../db/goodsModel.js')

// 创建路由表（空表）
let router = express.Router()

// 向路由表中添加内容

// 添加商品接口
router.post('/add',(req,res)=>{// fn1 请求处理函数
    // 获取请求参数
    let {name,price,desc,num,type,imgurl} = req.body

    // 先查询数据库是否已添加该商品
    goodsModel.find({name})
    .then((arr)=>{
        if (arr.length > 0) {
            // 已有该商品，不添加数据
            res.send({"code":-1,"msg":"该商品已存在"})
            // 终止链式调用
            return new Promise(()=>{})
        } else {
            // 没有该商品，可以添加数据
            return goodsModel.insertMany({name,price,desc,num,type,imgurl})
        }
    })
    .then((arr)=>{
        if (arr.length > 0) {
            res.send({"code":1,"msg":"商品添加成功"})
        } else {
            res.send({"code":0,"msg":"商品添加失败"})
        }
    })
    .catch((err)=>{
        res.send({"code":-2,"msg":err})
    })
})

// 删除商品接口
router.post('/delete',(req,res)=>{// fn2 请求处理函数
    // 获取请求参数
    let {name} = req.body
    // 删除数据
    goodsModel.deleteOne({name})
    .then(()=>{
        res.send({"code":1,"msg":"商品删除成功"})
    })
    .catch(()=>{
        res.send({"code":0,"msg":"商品删除失败"})
    })
})

// 修改商品接口
router.post('/update',(req,res)=>{// fn3 请求处理函数
    // 获取请求参数
    let {oldname,name,price,desc,type,num,imgurl} = req.body
    // 修改数据
    goodsModel.updateOne({name:oldname},{$set:{name,price,desc,type,num,imgurl}})
    .then(()=>{
        res.send({"code":1,"msg":"数据修改成功"})
    })
    .catch(()=>{
        res.send({"code":0,"msg":"数据修改失败"})
    })
})

// 获取数据接口
router.post('/getdata',(req,res)=>{// fn3 请求处理函数
    // 获取请求参数
    let {page=1,size=4} = req.body
    let pages = 0 // 数据的总页数
    let count = 0 // 数据的总条数
    // 查询数据库
    goodsModel.find()
    .then((arr)=>{
        count = arr.length
        pages = Math.ceil(count/size)
        // 分页查询
        // limit(4) 查询4条数据
        // skip(4) 从索引为4的位置开始查询  1 -> 0   2 -> 4  3 -> 8 ...
        return goodsModel.find().limit(Number(size)).skip((page-1)*size)
    })
    .then((arr)=>{
        res.send({"code":1,"msg":"获取数据成功","datas":arr,"count":count,"pages":pages})
    })
    .catch(()=>{
        res.send({"code":0,"msg":"获取数据失败","datas":[],"count":0,"pages":0})
    })
})

// 搜索查询接口
router.post('/search',(req,res)=>{
    // 获取请求参数
    let {wd} = req.body
    // 匹配 wd 的正则
    let reg = new RegExp(wd)
    // 查询数据库
    goodsModel.find({$or:[{name:{$regex:reg}},{price:{$regex:reg}},{desc:{$regex:reg}},{type:{$regex:reg}}]})
    .then((arr)=>{
        res.send({"code":1,"msg":"查询成功","datas":arr})
    })
    .catch(()=>{
        res.send({"code":0,"msg":"查询失败","datas":[]})
    })
})

// 后端接收上传的文件
// 使用multer插件接收文件
// 1.安装：npm i multer
// "multer": "^1.4.5-lts.1"
// 2.加载模块
let multer = require('multer')

/* // 3.创建multer对象
let upload = multer({// opts配置对象
    dest: './www/uploads/' // 设置上传文件的存储目录
})
// 4.接收单个文件
// upload.single('upfile') */

// 3.创建multer对象
let upload = multer({// opts配置对象
    limits: {
        // 限制上传文件最大为500kb
        fileSize: 1024 *500
    },
    fileFilter: function (req,file,cb){
        // console.log( file )
        // file = {
        //     fieldname: 'upfile',
        //     originalname: '02.jpg',
        //     encoding: '7bit',
        //     mimetype: 'image/jpeg'
        // }
        // 过滤上传文件类型
        let reg = /\.(png|jpe?g|gif)$/i
        if (reg.test(file.originalname)) {
            cb(null, true)// 接收文件
        } else {
            cb(null, false)// 拒收文件
        }
    },
    storage: multer.diskStorage({
        destination: function (req, file, cb) {
            // console.log( file )
            // file = {
            //     fieldname: 'upfile',
            //     originalname: '02.jpg',
            //     encoding: '7bit',
            //     mimetype: 'image/jpeg'
            // }
            // 设置上传文件的存储目录
            cb(null, './www/uploads')
        },
        filename: function (req, file, cb) {
            // console.log( file )
            // file = {
            //     fieldname: 'upfile',
            //     originalname: '02.jpg',
            //     encoding: '7bit',
            //     mimetype: 'image/jpeg'
            // }
            // 设置上传文件的名称
            let filen = 'upload-'+Date.now()+'-'+parseInt(Math.random()*100000)+path.extname(file.originalname)
            cb(null, filen)
        }
    })
})
// 4.接收单个文件
let fun = upload.single('upfile')

// 上传文件接口
router.post('/upload',(req,res)=>{// 请求处理函数
    // console.log( req.file )
    // req.file = {
    //     fieldname: 'upfile',
    //     originalname: '02.jpg',
    //     encoding: '7bit',
    //     mimetype: 'image/jpeg',
    //     destination: './www/uploads/',
    //     filename: '9012e2d616fe875aba0d6fb769d57aa6',
    //     path: 'www\\uploads\\9012e2d616fe875aba0d6fb769d57aa6',
    //     size: 50687
    // }
    // console.log( req.body )// { user: 'xiaocuo' }

    fun(req,res,(err)=>{// 接收文件之后执行回调函数
        if (err) {
            // 文件大小不符合要求,接收文件出错
            return res.send({"code":-1,"msg":"上传文件最大为500kb"})
        }
        if (!req.file) {
            // 上传文件被拒收
            return res.send({"code":-2,"msg":"上传文件类型错误"})
        }
        res.send({"code":1,"msg":"上传文件成功","imgurl":"http://localhost:8080/static/uploads/"+req.file.filename})
    })
})

// 对外暴露模块内容
module.exports = router
